Skip to content

create#17

Closed
DevLabStudy wants to merge 27 commits intofeature-stacks-logsfrom
main
Closed

create#17
DevLabStudy wants to merge 27 commits intofeature-stacks-logsfrom
main

Conversation

@DevLabStudy
Copy link
Owner

No description provided.

Update README formatting and feature list
Added a new section for Login with an image.
Updated the login image width in the README.
Increase login image width to 800px
Fix formatting of screenshots section in README
Add Patreon funding option alongside Buy Me a Coffee
Add stacks, logs, space background
Add stacks, container logs, space background
Copilot AI review requested due to automatic review settings February 2, 2026 16:12
@DevLabStudy DevLabStudy closed this Feb 2, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Stack (Docker Compose) management and container log viewing to the Orbit Control dashboard, alongside significant UI styling updates and repository housekeeping.

Changes:

  • Added Stacks tab with create/start/stop/restart/remove actions and backend endpoints to manage Compose projects.
  • Added container log viewing (UI modal + /container/<id>/logs endpoint).
  • Updated UI styling (space background, banners, modal extensions) and added a Docker publish GitHub Actions workflow.

Reviewed changes

Copilot reviewed 6 out of 8 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
templates/index.html Adds new UI elements (space background, GitHub banner) and new modals for stack creation and logs display.
static/js/dashboard.js Implements Stacks UI logic, stack actions, and container logs modal/refresh behavior.
app.py Adds stack discovery and stack lifecycle endpoints, plus a container logs endpoint; bumps app version.
README.md Updates formatting and screenshots section, but now diverges from the implemented features and has HTML/link issues.
.gitignore Adds DB ignore rules, but the DB is still present in the PR and should be removed from tracking.
.github/workflows/docker-publish.yml Adds image build/push workflow.
.github/FUNDING.yml Adds Patreon funding option.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +358 to +362
stack_dir = os.path.join(STACKS_PATH, name)
os.makedirs(stack_dir, exist_ok=True)
compose_file = os.path.join(stack_dir, 'docker-compose.yml')
with open(compose_file, 'w') as f:
f.write(compose_content)
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stack_create() uses the user-provided name directly in os.path.join(STACKS_PATH, name) and then writes docker-compose.yml. This allows path traversal (e.g., ../...) or names containing path separators, which can write outside /app/stacks. Validate/sanitize name (e.g., strict regex like [a-z0-9][a-z0-9_-]*), and enforce that the resolved path stays under STACKS_PATH before creating directories/files.

Copilot uses AI. Check for mistakes.
Comment on lines +364 to +366
result = subprocess.run(['docker', 'compose', '-p', name, '-f', compose_file, 'up', '-d'],
capture_output=True, text=True)
if result.returncode != 0:
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stack_create() shells out to docker compose ... up -d via subprocess.run(...) without a timeout and without handling FileNotFoundError when the docker CLI / compose plugin is missing. Given the current runtime image installs only Python deps, this is likely to fail or hang indefinitely. Consider either implementing stack creation via the Docker SDK, or ensure the image includes the Docker CLI + compose plugin and add timeout=... + explicit error handling so the API returns a clear message.

Copilot uses AI. Check for mistakes.
Comment on lines 437 to +441
const res = await fetch('https://api.github.com/repos/TobiMessi/orbit/releases/latest');
if (!res.ok) return;

const data = await res.json();
const latestVersion = data.tag_name.replace('v', '');

if (latestVersion !== currentVersion) {
if (latestVersion !== "1.1.0") {
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checkForUpdate() compares GitHub’s latest tag against a hard-coded version string. This will drift on every release and duplicates VERSION from the backend. Fetch the current version from /api/version and compare against that value instead of embedding it in JS.

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +6
on:
push:
branches: [ "main", "add-screenshots" ] # Reaguje na Twoje obecne branche

Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This workflow publishes on pushes to both main and add-screenshots. Publishing images from a non-release branch increases the chance of pushing unreviewed or experimental builds to :latest. Consider limiting to main and/or tags/releases.

Copilot uses AI. Check for mistakes.

jobs:
build:
runs-on: [self-hosted, hp-build]
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The job runs on a self-hosted runner while using Docker Hub secrets. Self-hosted runners have a larger trust surface than GitHub-hosted runners. If self-hosted is required, consider adding environment protections/approvals and restricting runner access to reduce secret-exposure risk.

Suggested change
runs-on: [self-hosted, hp-build]
runs-on: ubuntu-latest

Copilot uses AI. Check for mistakes.
Comment on lines 107 to 108
</details>

Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The screenshots section has an extra closing </details> tag (there’s one closing tag at line 104 and another at line 107). This breaks the HTML structure in the rendered README; remove the redundant closing tag.

Suggested change
</details>

Copilot uses AI. Check for mistakes.
Comment on lines 14 to 18
**Monitor and manage your Docker containers, images, volumes, and networks from a beautiful web interface.**

[Features](#-features) • [Installation](#-installation) • [Usage](#-usage) • [Roadmap](#-roadmap)

</div>
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The top-of-README quick links use anchors like #-features / #-installation, but the headings now render to anchors like #features / #installation on GitHub. Update these link targets (or restore previous heading formatting) so the links work.

Copilot uses AI. Check for mistakes.
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}

Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new background animations (e.g., twinkle and other infinite animations in this file) don’t respect reduced-motion preferences. Add a @media (prefers-reduced-motion: reduce) override to disable or significantly reduce these animations for accessibility.

Suggested change
@media (prefers-reduced-motion: reduce) {
.stars,
.stars2,
.planet1,
.planet2 {
animation: none !important;
}
}

Copilot uses AI. Check for mistakes.
capture_output=True, text=True)
os.remove(compose_file)
try: os.rmdir(stack_dir)
except: pass
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Except block directly handles BaseException.

Suggested change
except: pass
except OSError: pass

Copilot uses AI. Check for mistakes.
capture_output=True, text=True)
os.remove(compose_file)
try: os.rmdir(stack_dir)
except: pass
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'except' clause does nothing but pass and there is no explanatory comment.

Suggested change
except: pass
except OSError: pass

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant